#lang racket
(require 2htdp/universe 2htdp/image)

(provide (all-defined-out))

;(require "animation.rkt")

;Class Image : Class mère de toute les images
(define Image%
  (class object%
    ;Attributs : Pos X : abscisse, posY : ordonnée, sa Couleur, Son mode : 'solid ou 'outline 
    ;et si elle est animée
    (init-field (posX 0) (posY 0) (couleur "green") (mode 'solid) (isAnimated '#f))
    (define/public (getPosX) posX) ;Renvoi la position sur l'axe des abscisses
    (define/public (getPosY) posY);Renvoi la position sur l'axe des ordonnées
    (define/public (getMode) mode) ;Renvoi le mode
    (define/public (getCouleur) couleur) ;Renvoi la couleur
    (define/public (isAnimated?) isAnimated) ;Renvoi si elle est animée
    (define/public (setPosX x) (set! posX x) ) 
    (define/public (setPosY y) (set! posY y) )
    (define/public (setSolid) (set! mode 'solid) )
    (define/public (setOutline) (set! mode 'outline) )
    (define/public (setCouleur c) (set! couleur c) )
    (define/public (set-isAnimated b) (set! isAnimated b))
    (define/public (Animate T) (set! isAnimated T) )
    (define/public (getImage) (void))
    (define/public (getClass) 'Image%)
    ;(define/public (getAll) ((send this getPosX)(send this getPosY) (send this getCouleur) (send this getMode) (send this getRayon)) )
    (super-new)
  )
)

(define Balle%
  (class Image%
    ;(inherit-Field color)
    (init-field (rayon 0))
    (define/public (getRayon) rayon)
    (define/public (setRayon d) (set! rayon d) )
    (define/override (getImage) (circle rayon (send this getMode) (send this getCouleur)))
    (define/override (getClass) 'Balle%)
    ;(define/override (getAll) ( rayon (send this getPosX)(send this getPosY) (send this getCouleur) (send this getMode) (send this getRayon)) )
    (super-new)
  )
)

(define Rectangle%
  (class Image%
    (init-field (longeur 0) (hauteur 0))
    (define/public (getHauteur) hauteur)
    (define/public (getLongeur) longeur)
    (define/public (setLongeur l) (set! longeur l) )
    (define/public (sethauteur h) (set! hauteur h) )
    (define/override (getClass) 'Rectangle%)
    (define/override (getImage) (rectangle longeur hauteur (send this getMode) (send this getCouleur)))
    (super-new)
  )
)

;(define B (new Balle% (posX 5) (posY 8) (couleur "blue") (rayon 30)))
;(define C (new Rectangle% (posX 5) (posY 8) (couleur "blue") (longeur 100) (hauteur 20)))
;(send B getPosX)
;(send B getImage)

